/**
 * @p.md
 * 
 * 集群配置接口
 */

/**
 * 集群配置选项
 */
export interface ClusterConfig {
  /**
   * 集群名称
   */
  clusterName: string;

  /**
   * 本节点地址 (host:port)
   */
  nodeAddress: string;

  /**
   * 本节点主机名
   */
  hostname?: string;

  /**
   * 本节点端口号
   */
  port?: number;

  /**
   * 集群提供者类型
   */
  providerType: string;

  /**
   * 集群提供者配置
   */
  providerConfig: any;

  /**
   * 重新连接间隔(毫秒)
   */
  reconnectInterval: number;

  /**
   * 心跳间隔(毫秒)
   */
  heartbeatInterval: number;

  /**
   * 是否启用虚拟节点功能
   */
  enableVirtualNodes: boolean;

  /**
   * 虚拟节点数(当启用虚拟节点时)
   */
  virtualNodeCount?: number;
}

/**
 * 默认集群配置
 */
export const DefaultClusterConfig: ClusterConfig = {
  clusterName: 'default-cluster',
  nodeAddress: '127.0.0.1:0',
  providerType: 'memory',
  providerConfig: {},
  reconnectInterval: 5000,
  heartbeatInterval: 1000,
  enableVirtualNodes: false
};

/**
 * 集群成员状态枚举
 */
export enum MemberStatus {
  /**
   * 活跃状态
   */
  Alive = 'alive',
  
  /**
   * 离开状态
   */
  Leaving = 'leaving',
  
  /**
   * 已下线状态
   */
  Dead = 'dead',
  
  /**
   * 不可用状态
   */
  Unavailable = 'unavailable'
}

/**
 * 集群成员信息
 */
export interface Member {
  /**
   * 成员ID
   */
  id: string;
  
  /**
   * 成员地址 (host:port)
   */
  address: string;
  
  /**
   * 成员主机名
   */
  host: string;
  
  /**
   * 成员端口号
   */
  port: number;
  
  /**
   * 成员状态
   */
  status: MemberStatus;
  
  /**
   * 成员加入时间
   */
  joinedAt: number;
  
  /**
   * 能力/标签
   */
  capabilities?: Map<string, any>;
  
  /**
   * 成员元数据
   */
  metadata?: Map<string, any>;
} 